#include <iostream>


// 普通函数与模板函数的区别

// 1、普通函数调用可以发生隐式类型转换
// 2、函数模板 用自动类型推导，不可以发生隐式类型转换
// 3、普通函数不能被template修饰，template函数可以被普通函数调用
// 4、函数模板 用显式指定类型，可以发生隐式类型转换


// 例子1：普通函数调用可以发生隐式类型转换

// 普通函数
int myAdd01(int a, int b)
{
    return a + b;
}

void test01() 
{
    int a = 10;
    int b = 20;
    char c = 'c';
    std::cout << myAdd01(a, c) << std::endl;
}


// 函数模板
template<typename T>
T myAdd02(T a, T b)
{
    return a + b;
}

void test02() 
{
    int a = 10;
    int b = 20;
    char c = 'c';

    // 自动类型推导 不会发生隐式类型转换
    // std::cout << myAdd02(a, c) << std::endl;

    std::cout << myAdd02<int>(a, c) << std::endl;  // 输出：30
}


int main()
{
    test01();
    test02();
    return 0;
}